#include "load.h"
#include <QString>

// 构造函数实现
Load::Load(const QString& name, double baseLoad)
    : Component(name, 1.0),  // 负载效率为1
    powerFactor(0.9),      // 默认功率因数
    isCritical(false)      // 默认非关键负载
{
    // 初始化负载曲线（默认全天恒定负载）
    loadProfile.resize(96); // 96个时间点（24小时，每15分钟一个）
    for (int i = 0; i < 96; ++i) {
        loadProfile[i] = baseLoad;
    }

    setActive(true); // 负载通常默认激活
    setPower(baseLoad);
}

// 析构函数实现
Load::~Load()
{
    // 清理资源（如果有）
}

// 设置负载曲线
void Load::setLoadProfile(const QVector<double>& profile)
{
    if (!profile.isEmpty()) {
        loadProfile = profile;
    }
}

// 获取负载曲线
QVector<double> Load::getLoadProfile() const
{
    return loadProfile;
}

// 获取指定时间的负载
double Load::getLoadAtTime(int timeIndex) const
{
    if (timeIndex >= 0 && timeIndex < loadProfile.size()) {
        return loadProfile[timeIndex];
    }
    return 0;
}

// 更新当前负载（基于时间）
void Load::updateLoad(int timeIndex)
{
    double newLoad = getLoadAtTime(timeIndex);
    setPower(newLoad);
}

// 设置功率因数
void Load::setPowerFactor(double pf)
{
    if (pf >= 0 && pf <= 1) {
        powerFactor = pf;
    }
}

// 获取功率因数
double Load::getPowerFactor() const
{
    return powerFactor;
}

// 设置是否为关键负载
void Load::setCritical(bool critical)
{
    isCritical = critical;
}

// 检查是否为关键负载
bool Load::isCriticalLoad() const
{
    return isCritical;
}

// 重写基类的获取状态方法
QString Load::getStatus() const
{
    return QString("%1\n功率因数: %2\n负载类型: %3")
        .arg(Component::getStatus())
        .arg(powerFactor)
        .arg(isCritical ? "关键负载" : "普通负载");
}
